import axios from 'axios'
import { Message } from 'element-ui'
import store from '@/store'
import router from '@/router'
const request = axios.create({
  // baseURL: 'https://heimahr.itheima.net/api',// 跨域问题，无法直接向目标地址请求数据
  // baseURL: 'http://localhost:9528/api', // 使用代理
  baseURL: process.env.VUE_APP_BASE_API, // 使用代理，简写
  timeout: 50000
})

request.interceptors.request.use(config => {
  // 获取token
  // const token = getToken() // 通过cookie获取
  // const token = store.state.user.token // 通过小仓库获取
  const token = store.getters.token // 通过getters获取

  // 如果token存在，则添加到请求头
  if (token) {
    config.headers.Authorization = `Bearer ${token}`
  }
  return config
}, error => {
  return Promise.reject(error)
})

request.interceptors.response.use(response => {
  // 如果是开发模式，则打印响应数据
  if (process.env.NODE_ENV === 'development') {
    console.log(response) // 打印响应数据
  }
  // 解构response
  const { data } = response
  // 判断data是不是一个对象

  if (Object.keys(data).includes('success')) {
    // 判断是否存在success属性
    // 如果存在，则判断是否为true
    // 如果为true，表示请求成功，业务成功
    if (data.success) {
      // 如果是开发模式，则打印响应数据
      if (process.env.NODE_ENV === 'development') {
        console.log(data.data) // 打印响应数据
      }
      return data.data
    } else {
      // 请求成功，但是业务失败
      // 提示错误信息
      Message.error(data.message)
      return Promise.reject(new Error(data.message))
    }
  } else {
    // 不存在success属性，则直接返回数据
    return data
  }
}, error => {
  // 请求失败
  // 打印错误信息
  if (process.env.NODE_ENV === 'development') {
    console.dir(error)
  }
  if (error.response.status === 401) {
    // 提示错误信息
    Message.error('token已过期，请重新登录')
    // 退出登录
    store.dispatch('user/logout')
    // 跳转登录页
    router.push('/login')
  } else {
    // 提示错误信息
    // Message.error(error.message)
  }
  return Promise.reject(error)
})

export default request
